LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

VINS-Fusion-evaluation

2022/12/9

VINS-Fusion评估

记录一下评估VINS-Fusion的过程


EVO安装

evo是一款用于视觉里程计和slam问题的轨迹评估工具。

核心功能是能够绘制相机的轨迹,或评估估计轨迹与真值的误差。

链接:https://github.com/MichaelGrupp/evo


ubuntu18.04安装:

pip3 install evo --upgrade --no-binary evo

配置VINS-Fusion输出

以单目+IMU为例,配置文件在VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

其中的output_path就是结果csv文件保存路径,pose_graph_save_path就是位姿图保存路径

(tips: ①注意改为绝对路径,不要用带~根目录,不然后续保存不成功 ②路径最后要加/ ③ 提前创建好文件夹)

修改完重新运行代码,等待运行完,在运行loop_fusion的终端,按s后回车,等待保存

需要40s左右的时间,最后有显示保存时间即为保存成功,在对应路径就可以找到输出的文件

cd ~/catkin_ws
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml
rosbag play ~/catkin_ws/src/VINS-Fusion/datasets/MH_01_easy.bag

改变VINS-Fusion输出格式

经过上述配置,我们获得了VINS-Fusion的输出vio.csv和vio_loop.csv

但是这两个文件并没办法直接使用,因为每一行的末尾都有一个逗号

有两种办法:① 修改输出代码 ② 直接对输出文件去逗号

修改代码

代码修改会相对比较麻烦,但是方便后续拓展

①修改vio.csv的保存

文件所在路径:VINS-Fusion/vins_estimator/src/utility/visualization.cpp

定位位置:搜索foutC

保存的数据格式为:时间戳*1e9,位置xyz,旋转四元数wxyz,速度xyz

我们需要把行末的逗号去掉

②修改vio_loop.csv的保存

文件所在路径:VINS-Fusion/loop_fusion/src/pose_graph.cpp

定位位置:搜索SAVE_LOOP_PATH

保存的数据格式为:时间戳*1e9,位置xyz,旋转四元数wxyz

我们需要把行末的逗号去掉(有两段一样的要改)

③重新编译运行后保存


直接对输出文件去逗号

这个命令代表全局搜索(g)将行末的逗号(,$)替换掉并保存

sed -i 's/,$//g' vio.csv
sed -i 's/,$//g' vio_loop.csv

如果想保存在新文件可以写成这样

sed -e 's/,$//g w vio_new.csv' vio.csv

评估

格式转换

经过上述步骤,获得了可以用于评估的vio.csv和vio_loop.csv

可以先转化成tum格式文件,方便后续评估没有报错

转化后数据会只剩下(时间戳*1e9,位置xyz,旋转四元数wxyz)

# 转换GT文件为tum
cd ~/catkin_ws/src/VINS-Fusion/datasets/MH_01_easy/mav0/state_groundtruth_estimate0
evo_traj euroc data.csv --save_as_tum

# 转换vio文件为tum
cd ~/catkin_ws/src/VINS-Fusion/output
evo_traj euroc vio.csv --save_as_tum

# 转换vio_loop文件为tum
cd ~/catkin_ws/src/VINS-Fusion/output
evo_traj euroc vio_loop.csv --save_as_tum

绘制轨迹

可以绘图显示单个结果文件

cd ~/catkin_ws/src/VINS-Fusion/
evo_traj tum ./output/vio.tum -p
evo_traj tum ./output/vio_loop.tum -p

(我这边提示没有tkinter,安装即可)

sudo apt-get install python3-tk

绝对误差评估

cd ~/catkin_ws/src/VINS-Fusion/
mkdir ./evolution

evo_ape tum \
./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
./output/vio.tum \
-va \
-p --plot_mode xy \
--save_plot ./evolution/vio_plot \
--save_results ./evolution/vio_result.zip

evo_ape tum \
./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
./output/vio_loop.tum \
-va \
-p --plot_mode xy \
--save_plot ./evolution/vio_loop_plot \
--save_results ./evolution/vio_loop_result.zip

保存图片的路径应该是字符串拼接的,可以给图片名加前缀,如果要保存在文件夹内最后要加上/

一定要-a轨迹对齐,-v表示详细输出


轨迹对比评估

差值评估还是没有轨迹图对比评估来得直观

evo_traj tum \
./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
./output/vio.tum \
-a --ref ./datasets/MH_01_easy/mav0/state_groundtruth_estimate0/data.tum \
-v -p

对比评估

mkdir ./evolution/comparison

evo_res  ./evolution/*.zip \
-p --save_plot ./evolution/comparison/ \
--save_table ./evolution/comparison/table.csv